/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Presente;

import BancoDados.BancoDados;
import Coleção.Coleçãoproduto;
import Entidade.ClienteModel;
import Entidade.EstoqueModel;
//import Entidade.Data;
import Entidade.ItemVendaModel;
import Entidade.NotaFiscalVenda;
import Entidade.ProdutoModel;
import Entidade.ProdutoModelVenda;
import Entidade.VendaModel;
import Entidade.VendedorModel;
import Pesistencia.EstoquePersistencia;
import Pesistencia.ItemVendaPersistencia;
import Pesistencia.NotaFiscalPersistencia;
import Pesistencia.ProdutoPersistencia;
import Pesistencia.VendaPersistencia;
import View.EfetuarVendaView1;
import View.EfetuarVendaView2;
import View.MainVendedorView;
import View.NFvenda;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Thalyta
 */
public class EfetuarVendaPresente {

              private EfetuarVendaView2 view = new EfetuarVendaView2();
              Coleçãoproduto produto = new Coleçãoproduto();
              double quant =0 ;
              double valortotal = 0 ;
              ClienteModel cliente;
              VendedorModel vendedor;
               private BancoDados banco = new BancoDados();
              VendaPersistencia vendas = new VendaPersistencia(banco);
              ItemVendaPersistencia itens = new ItemVendaPersistencia(banco);
              NotaFiscalPersistencia nta = new NotaFiscalPersistencia(banco);
              NFvenda telavenda = new NFvenda();
              EstoqueModel estoque ;
              EstoquePersistencia estoques = new EstoquePersistencia(banco);
    public EfetuarVendaPresente(EfetuarVendaView2 vie, ClienteModel cliente1,VendedorModel vendedor1) {
        view = vie ;
        cliente = cliente1;
        vendedor = vendedor1;
        
         view.getBtncancelar().addActionListener(new ActionListener() {
         
            @Override
            public void actionPerformed(ActionEvent e) {
                cancelar();
            }
       });
       
       view.getBtnsalvar().addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent e) {
              salvar();
           }

          
       });
       
       view.getVoltar().addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent e) {
              voltar();
           }

          
       });
       
       
       view.getBtnadd().addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent e) {
              Adicionar();
           }

          
       });
       view.getBtnretirar().addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent e) {
             retirar();
           }

          
       });
               view.setLocationRelativeTo(null);

        view.setVisible(true);
    }
    
    public void retirar(){
        
        String codigo = view.getTbltabelaproduto().getValueAt(view.getTbltabelaproduto().getSelectedRow(),0).toString(); 
        ProdutoModelVenda  produtos ;
        produtos = produto.buscar(Integer.parseInt(codigo));
        valortotal =(( valortotal * (1 +(Double.parseDouble(view.getTxtdesconto().getText())/100))) - (produtos.getProduto().getValor() * produtos.getQuant()));
        produto.Remover(produtos);
        view.getTxtvalortotal().setText(Double.toString(valortotal));
        EfetuarVendaView2 vie = new EfetuarVendaView2();
        carregartabela(produto);
    
    }             
    
    public void salvar(){
        
    
    VendaModel venda = new VendaModel(vendas.recuperarUltimoCodigo()+1,cliente.getCodigo(), vendedor.getCodigo(),Double.parseDouble(view.getTxtdesconto().getText()) ,view.getjComboBox1().getSelectedItem().toString(), valortotal);
    vendas.cadastrar(venda);
    Date hoje = new Date(); 
    SimpleDateFormat df; 
    df = new SimpleDateFormat("yyyy/MM/dd"); 
    //java.sql.Date data = new java.sql.Date(df.format(hoje));
    java.util.Date dataAtual = new java.util.Date();    
    java.sql.Date dataSQL = new java.sql.Date(dataAtual.getTime()); 
    //System.out.println("data do sistema" +dataSQL);
    telavenda.getTxtdata().setText(String.valueOf(dataSQL));
    NotaFiscalVenda nota = new NotaFiscalVenda(venda.getCod(),  String.valueOf(dataSQL));
    nta.cadastrar(nota);
    
       for (int i = 0; i < produto.getProdutos().size(); i++) {
         
            ProdutoModelVenda produtoModel = (ProdutoModelVenda) produto.getProdutos().get(i); 
               ItemVendaModel itemvenda = new ItemVendaModel(produtoModel.getProduto().getCodigo(),venda.getCod(),produtoModel.getProduto().getValor(),produtoModel.getQuant());
            itens.cadastrar(itemvenda);
           
              EstoqueModel p = estoques.buscar(produtoModel.getProduto().getCodigo());
              
              
            if  (p!= null){
                    estoque = estoques.buscar(produtoModel.getProduto().getCodigo());
                    estoque.setQuant(estoque.getQuant()- itemvenda.getQuant());
                    estoques.editar(estoque);
            }
            
           
            view.setVisible(false);
            telavenda.getTxtcliente().setText(cliente.getNome());
            telavenda.getTxtvendedor().setText(vendedor.getNome());
            telavenda.getTxtvalor().setText(Double.toString(quant));
            telavenda.getTxtvalor().setEditable(false);
            telavenda.getTxtvalortotal().setText(Double.toString(valortotal));
            telavenda.getTxtvenda().setText(Integer.toString(venda.getCod()));
            telavenda.getTxtdesconto().setText(view.getTxtdesconto().getText());
            telavenda.getTxtdata().setEditable(false);
            telavenda.getTxtvendedor().setEditable(false);
            telavenda.getTxtcliente().setEditable(false);
            telavenda.getTxtdata().setEditable(false);
            telavenda.getTxtdesconto().setEditable(false);
            telavenda.getTxtvalortotal().setEditable(false);
            telavenda.getTxtvenda().setEditable(false);
            carregartabela(produto);
            telavenda.setLocationRelativeTo(null);
            telavenda.setVisible(true); 
            telavenda.getBtnimprimir().addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent e) {
               JOptionPane.showMessageDialog(telavenda, "Não existe nenhuma impressora ligada ao software, =/ ");
              telavenda.setVisible(false);
           }

          
       });
               
            
            
          }
    
 
    }   
 
 public void  Adicionar(){
     
     BancoDados banco = new BancoDados();
     ProdutoPersistencia produtos = new ProdutoPersistencia(banco);
     ProdutoModel codigo = produtos.buscar(Integer.parseInt(view.getTxtcodigoproduto().getText()));
     ProdutoModelVenda produtu = new ProdutoModelVenda(codigo,Integer.parseInt(view.getTxtquant().getText()) );
     produto.Add(produtu);
    
      for (Iterator< ProdutoModelVenda > it = produto.getProdutos().iterator(); it.hasNext();) {
          
            ProdutoModelVenda  produtoModel = it.next();  
            quant = (produtoModel.getQuant() * produtoModel.getProduto().getValor());
            
          }
     valortotal =valortotal + quant * (1 - (Double.parseDouble(view.getTxtdesconto().getText())/100));
     view.getTxtvalortotal().setText(Double.toString(valortotal));
     EfetuarVendaView2 vie = new EfetuarVendaView2();
   
     carregartabela(produto);
     
     
 }
 
 
 public void  voltar(){
 EfetuarVendaView1 vie = new EfetuarVendaView1();
EfetuarVendaPresente1 cont = new EfetuarVendaPresente1(vie);
 view.setVisible(false);
 }
 
public void cancelar (){
view.setVisible(false);

    }

public final void carregartabela(Coleçãoproduto produtos){
    
    DefaultTableModel tm = new DefaultTableModel (
            
            new Object[][] {},
            new String []{" codProduto","Nome","Valor","Descrição","Quant"}){
                
                public boolean isCellEditable(int ronw, int col){
                    return false;
                }
            };
    tm.setNumRows(0);
    
    for (int i = 0; i < produtos.getProdutos().size(); i++) {
        ProdutoModelVenda produto = (ProdutoModelVenda) produtos.getProdutos().get(i);
        
        tm.addRow(new Object[]{produto.getProduto().getCodigo(),produto.getProduto().getNome(),produto.getProduto().getValor(),produto.getProduto().getDescricao(),produto.getQuant()});
        
        
    }
     view.getTbltabelaproduto().setModel(tm);
     telavenda.getTbltabelaproduto().setModel(tm);      
            
}
}

      
    
 